{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from typing import Dict, List, Tuple, Union\n",
    "\n",
    "import empyrical as ep\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "from jqdata import *\n",
    "from sqlalchemy.sql import func\n",
    "\n",
    "plt.rcParams[\"font.sans-serif\"]=[\"SimHei\"] #设置字体\n",
    "plt.rcParams[\"axes.unicode_minus\"]=False #该语句解决图像中的“-”负号的乱码问题\n",
    "\n",
    "from scr import (\n",
    "    PrepareData,\n",
    "    TradeDays,\n",
    "    get_author_proba,\n",
    "    get_stock_group_returns,\n",
    "    load_gold_stock_csv,\n",
    "    transform2stock_group,\n",
    "    view_author_stock,\n",
    ")\n",
    "\n",
    "td = TradeDays()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据介绍\n",
    "\n",
    "金股数据说明:end_date为金股的截至日(即券商推荐的金股有效期),write_date为公告日(即对应券商在微信公众号、研报等推送的时间),通过write_date我们可以看到金股组合大多数是在上月低和当月出发布出来。\n",
    "\n",
    "**\\统计分析时next_return使用的是$\\frac{close}{close_{t-1}}-1$与end_date对齐的方式进行统计分析。**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>author</th>\n",
       "      <th>sw_l3</th>\n",
       "      <th>org_name</th>\n",
       "      <th>code</th>\n",
       "      <th>end_date</th>\n",
       "      <th>write_date</th>\n",
       "      <th>sec_short_name</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>张云凯</td>\n",
       "      <td>住宅开发</td>\n",
       "      <td>东北证券</td>\n",
       "      <td>000656.XSHE</td>\n",
       "      <td>2018-01-31</td>\n",
       "      <td>2017-12-28</td>\n",
       "      <td>金科股份</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>李俊峰</td>\n",
       "      <td>种子</td>\n",
       "      <td>东北证券</td>\n",
       "      <td>000998.XSHE</td>\n",
       "      <td>2018-01-31</td>\n",
       "      <td>2017-12-28</td>\n",
       "      <td>隆平高科</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>李瑶</td>\n",
       "      <td>种子</td>\n",
       "      <td>东北证券</td>\n",
       "      <td>000998.XSHE</td>\n",
       "      <td>2018-01-31</td>\n",
       "      <td>2017-12-28</td>\n",
       "      <td>隆平高科</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>张云凯</td>\n",
       "      <td>商业地产</td>\n",
       "      <td>东北证券</td>\n",
       "      <td>001979.XSHE</td>\n",
       "      <td>2018-01-31</td>\n",
       "      <td>2017-12-28</td>\n",
       "      <td>招商蛇口</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>李恒光</td>\n",
       "      <td>底盘与发动机系统</td>\n",
       "      <td>东北证券</td>\n",
       "      <td>002126.XSHE</td>\n",
       "      <td>2018-01-31</td>\n",
       "      <td>2017-12-28</td>\n",
       "      <td>银轮股份</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  author     sw_l3 org_name      ...         end_date write_date sec_short_name\n",
       "0    张云凯      住宅开发     东北证券      ...       2018-01-31 2017-12-28           金科股份\n",
       "1    李俊峰        种子     东北证券      ...       2018-01-31 2017-12-28           隆平高科\n",
       "2     李瑶        种子     东北证券      ...       2018-01-31 2017-12-28           隆平高科\n",
       "3    张云凯      商业地产     东北证券      ...       2018-01-31 2017-12-28           招商蛇口\n",
       "4    李恒光  底盘与发动机系统     东北证券      ...       2018-01-31 2017-12-28           银轮股份\n",
       "\n",
       "[5 rows x 7 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 获取金股数据\n",
    "gold_stock_frame:pd.DataFrame = load_gold_stock_csv()\n",
    "# 过滤北交所\n",
    "cond = (gold_stock_frame['code'] != \"835185.XSHG\")\n",
    "gold_stock_frame = gold_stock_frame[cond]\n",
    "gold_stock_frame.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由下图可知道**平均write_date日在每月的第3-4个交易日即全部发布完毕,所以在回测时在每月的第三个交易日进行调仓轮动。**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "平均在当月的第3.53发布\n"
     ]
    },
    {
     "data": {
      "image/png": "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W/+MZzxjtJ1vuj/bjn9gv/Vvuv6o3N8q37Xp/jzpuIfX7znOz3rWs5Ik1113XW6++ea9suvWrcs555yTJPn0pz+d2267ba/1GzZsyNlnn50k+f5T7su3POrBvdb/0/2VP911VJLkB07dnVOOfmiv/R977LHZtm1bkmTnzp25++6798pv3LgxT3nKU5IkV1xxRe6999691h9//PF50pOelCS57LLLct999+21/oQTTsgTnvCEJMmOHTvy4IN713fyySfn27/925MkP/mte287Sa790lIuv2N91lfLS8/82l7rtm/fPtOxd6D9f/CWDbn+7nU5+egH8/xT935t27dvn+nYO9D+/3TXkfmn+4/Idxz3QJ6+6f791u/evTtHHnlkbrzxxgPmDzb29nXdddftl7//ocqbbhiNnWefdF/OPHbv9+6eBx7+VZdrr712v/yhxl6S3LH74Z7ozp0798vfdO8Refc/HpkkedHWr+XR69te6//hq+u+fvuyyy7bL3/93evywVs2JEleesbXsv6IvfN/+08Pf6Ru3759v/yhxl6S7LxzlN8z9vbNX3HH+vzNl5by6PUP5UVbd++X33Hb+iT5+ufevvlDjb0ked9No9e2Z+ztm3/XP27Izfeuy5nHPphnn7R//uLPj47tNJ97e8berl27kuw9h7vG3v/4u6OT7P25tye/krH3lhtH66+99trceeede60/+uij8/SnPz1Jcs011+Suu+7aa32fPveW/73d8/pXMvau+uL6HLOu7f33+rWvTZKc8YEPZMvll+ee44/PlT/7s/vlH/ue9+SUq6/Ol08+OVf9xE8k+/zNn/Rv7p76VzL2bt99RB736Af2+/dGMtnYW+6Zz3xmlpaWcv311+cLX/jCfutn9Td3LY29PYb+772Tj35wxWPvnBPu3+84TDv21ldb0efeOSfcn8c9+oG99m/sPSZJVvS596OnP7x+z7bmPfYeif/X8Lnnc+9AY6+LMxAAAACATtVa637WlLZt29Z27ty56vtZa+b927Xz3v+0+lD/vH/DftpjIC8/TX4Wpp1D856D8zb1e1h18Cceyoz+bdGHMchim/cYnPf+h87xg5Wrqqtaa9u6nucMBAAAAKCTBgIAAADQSQMBAAAA6KSBAAAAAHTSQAAAAAA6aSAAAAAAnTQQAAAAgE5L8y5gLfPbs8PWh/dv0X/D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",
      "text/plain": [
       "<Figure size 1296x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "stats_write_date = gold_stock_frame.groupby('end_date')['write_date'].max()\n",
    "stats_write_date = stats_write_date.to_frame()\n",
    "stats_write_date.columns = ['write_date']\n",
    "stats_write_date['DayOfMonth'] = stats_write_date['write_date'].apply(lambda x:td.tradeday_of_month(x))\n",
    "\n",
    "stats_write_date.index = stats_write_date.index.strftime('%Y-%m')\n",
    "fig,ax = plt.subplots(figsize=(18,4))\n",
    "bar_ax = ax.bar(stats_write_date.index,stats_write_date['DayOfMonth'])\n",
    "\n",
    "max_idx = stats_write_date.index.get_loc(stats_write_date['DayOfMonth'].idxmax())\n",
    "bar_ax[max_idx].set_color('red')\n",
    "avg_num:float = stats_write_date['DayOfMonth'].mean()\n",
    "ax.axhline(avg_num,color='darkgray',ls='--')\n",
    "plt.xticks(rotation=90);\n",
    "\n",
    "print(f'平均在当月的第{round(avg_num,2)}发布')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 金股推荐历史量化处理\n",
    "\n",
    "使用Beta分布定量记录分析师金股推荐历史。假设，对于分析师的真实选股能力，没有先验知识。因此，每个分析师初始的Beta分布中，α = β = 1，此情况下，分析师推荐成功率在[0,1]上均匀分布。当分析师推荐金股成功时，即推荐月份的股票涨幅>0时，参数𝛼更新为𝛼 + 1。反之，当推荐失败时，参数𝛽更新为𝛽 + 1。\n",
    "\n",
    "Beta 分布的期望:\n",
    "$\\mu=E(x)=\\frac{\\alpha}{\\alpha+\\beta}$\n",
    "\n",
    "# 基于推荐成功概率分布构建金股组合\n",
    "\n",
    "1. 股票池：当月所有券商推荐的金股，无其它筛选条件。\n",
    "2. 组合构建流程：\n",
    "    - 获取当月所有券商推荐的金股及推荐金股的分析师信息；\n",
    "    - 查询金股数据库，获取当月推荐金股的每一位分析师的定量指标；\n",
    "    - 对分析师定量指标进行排序，分为 5 组，并构建相应的 5 个等权金股组合；\n",
    "    - 每月末重复上述操作并调仓；\n",
    "    - 回测时段：2020 年 1 月至 2022 年 8 月\n",
    "    - 调仓周期：月度调仓\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "证券代码:000043.XSHE,2022-08-31未查询到sw_l1行业名称\n"
     ]
    }
   ],
   "source": [
    "# 获取初始数据\n",
    "prepare_data = PrepareData(gold_stock_frame,'2017-12-01','2022-08-31')\n",
    "prepare_data.init_data()\n",
    "prepare_data.get_forward_returns()\n",
    "all_data:pd.DataFrame = prepare_data.full_data()\n",
    "\n",
    "# 获取分析师推荐概率\n",
    "params:Dict = {\n",
    "              'returns_name':'industry_excess', # 使用行业超额计算分析师推荐概率\n",
    "              'window':12, # 分析师近window月有推荐股票且推荐次数不少于等于threshold次\n",
    "              'threshold':5, \n",
    "              'beta_window':12 # beta分布滚动计算期\n",
    "              }\n",
    "author_proba:pd.DataFrame = get_author_proba(all_data,**params)\n",
    "# 获取分析师组合\n",
    "author_proflio:pd.DataFrame = transform2stock_group(author_proba,prepare_data.gold_stock_frame,group_num=5)\n",
    "# 计算组合月度收益率\n",
    "returns:pd.DataFrame =get_stock_group_returns(author_proflio,prepare_data.next_returns)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 1296x360 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1296x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "cum_frame = ep.cum_returns(returns.loc[\"2020-01-01\":])\n",
    "plt.figure(figsize=(18,5))\n",
    "\n",
    "fig,axes = plt.subplots(1,2,figsize=(18,4))\n",
    "bar_ax = axes[1].bar(cum_frame.iloc[-1].index,cum_frame.iloc[-1].values)\n",
    "bar_ax[4].set_color('red')\n",
    "axes[1].set_title('各组合月均收益率')\n",
    "axes[0].set_title('基于统计期推荐成功率分组测试')\n",
    "line_ax = sns.lineplot(data=cum_frame,palette='OrRd',dashes=False,ax=axes[0])\n",
    "\n",
    "def mjrFormatter(x, pos):\n",
    "    return \"{0:.2f}%\".format(x * 100)\n",
    "\n",
    "line_ax.yaxis.set_major_formatter(mpl.ticker.FuncFormatter(mjrFormatter))\n",
    "line_ax.set_ylabel('累计收益率(%)')\n",
    "axes[0].axhline(0,color='darkgray')\n",
    "axes[1].axhline(0,color='black');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "查看近期推荐概率top10的分析师及股票"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "monthEnd    author\n",
       "2022-08-31  于芳博       0.714286\n",
       "            张燕生       0.714286\n",
       "            刘贵军       0.675000\n",
       "            王楠        0.666667\n",
       "            赵国防       0.616667\n",
       "            鲍雁辛       0.611111\n",
       "            黄涛        0.611111\n",
       "            任文坡       0.605556\n",
       "            陶贻功       0.604167\n",
       "            李晓渊       0.600000\n",
       "Name: (2022-08-31, 0), dtype: float64"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "top_author:pd.Series = author_proba.loc[\"2022-08-31\"].nlargest(10)\n",
    "top_author.name = ('2022-08-31',0)\n",
    "top_author"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>author</th>\n",
       "      <th>sw_l3</th>\n",
       "      <th>org_name</th>\n",
       "      <th>code</th>\n",
       "      <th>end_date</th>\n",
       "      <th>write_date</th>\n",
       "      <th>sec_short_name</th>\n",
       "      <th>monthEnd</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>13084</th>\n",
       "      <td>陶贻功</td>\n",
       "      <td>其他专用设备</td>\n",
       "      <td>银河证券</td>\n",
       "      <td>002009.XSHE</td>\n",
       "      <td>2022-08-31</td>\n",
       "      <td>2022-07-28</td>\n",
       "      <td>天奇股份</td>\n",
       "      <td>2022-08-31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13087</th>\n",
       "      <td>任文坡</td>\n",
       "      <td>改性塑料</td>\n",
       "      <td>银河证券</td>\n",
       "      <td>002768.XSHE</td>\n",
       "      <td>2022-08-31</td>\n",
       "      <td>2022-07-28</td>\n",
       "      <td>国恩股份</td>\n",
       "      <td>2022-08-31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13182</th>\n",
       "      <td>王楠</td>\n",
       "      <td>通信终端及配件</td>\n",
       "      <td>兴业证券</td>\n",
       "      <td>003031.XSHE</td>\n",
       "      <td>2022-08-31</td>\n",
       "      <td>2022-07-30</td>\n",
       "      <td>中瓷电子</td>\n",
       "      <td>2022-08-31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13274</th>\n",
       "      <td>赵国防</td>\n",
       "      <td>啤酒</td>\n",
       "      <td>安信证券</td>\n",
       "      <td>600600.XSHG</td>\n",
       "      <td>2022-08-31</td>\n",
       "      <td>2022-08-01</td>\n",
       "      <td>青岛啤酒</td>\n",
       "      <td>2022-08-31</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      author    sw_l3 org_name    ...     write_date sec_short_name   monthEnd\n",
       "13084    陶贻功   其他专用设备     银河证券    ...     2022-07-28           天奇股份 2022-08-31\n",
       "13087    任文坡     改性塑料     银河证券    ...     2022-07-28           国恩股份 2022-08-31\n",
       "13182     王楠  通信终端及配件     兴业证券    ...     2022-07-30           中瓷电子 2022-08-31\n",
       "13274    赵国防       啤酒     安信证券    ...     2022-08-01           青岛啤酒 2022-08-31\n",
       "\n",
       "[4 rows x 8 columns]"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "view_author_stock(top_author,prepare_data.gold_stock_frame)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": false,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "MarkDown菜单",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "vscode": {
   "interpreter": {
    "hash": "49cb93f377a7abe7414b7b0f21fb3017538004a126cf690fb524202736b7fb92"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
